/**
 * 导出工具函数
 */

/**
 * 导出数据为CSV格式
 * @param data 要导出的数据
 * @param filename 文件名
 * @param headers 表头映射
 */
export const exportToCSV = (data: any[], filename: string, headers: Record<string, string>) => {
    if (!data || data.length === 0) {
        console.warn('没有数据可导出');
        return;
    }

    // 创建CSV内容
    const csvContent = [
        // 表头
        Object.values(headers).join(','),
        // 数据行
        ...data.map(row => 
            Object.keys(headers).map(key => {
                const value = row[key];
                // 处理包含逗号、引号或换行符的值
                if (typeof value === 'string' && (value.includes(',') || value.includes('"') || value.includes('\n'))) {
                    return `"${value.replace(/"/g, '""')}"`;
                }
                return value || '';
            }).join(',')
        )
    ].join('\n');

    // 创建Blob对象
    const blob = new Blob(['\ufeff' + csvContent], { type: 'text/csv;charset=utf-8;' });
    
    // 创建下载链接
    const link = document.createElement('a');
    const url = URL.createObjectURL(blob);
    link.setAttribute('href', url);
    link.setAttribute('download', `${filename}.csv`);
    link.style.visibility = 'hidden';
    
    // 触发下载
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    
    // 释放URL对象
    URL.revokeObjectURL(url);
};

/**
 * 导出数据为Excel格式（预留功能）
 * 如需使用，请先安装 xlsx 库：npm install xlsx
 * @param data 要导出的数据
 * @param filename 文件名
 * @param headers 表头映射
 */
export const exportToExcel = async (data: any[], filename: string, headers: Record<string, string>) => {
    console.warn('Excel导出功能需要安装 xlsx 库，请运行: npm install xlsx');
    throw new Error('Excel导出功能暂未启用，请使用CSV导出或安装xlsx库');
};

/**
 * 格式化日期时间
 * @param dateTime 日期时间字符串
 * @returns 格式化后的日期时间字符串
 */
export const formatDateTime = (dateTime: string | Date): string => {
    if (!dateTime) return '-';
    
    const date = new Date(dateTime);
    if (isNaN(date.getTime())) return '-';
    
    return date.toLocaleString('zh-CN', {
        year: 'numeric',
        month: '2-digit',
        day: '2-digit',
        hour: '2-digit',
        minute: '2-digit',
        second: '2-digit'
    });
};

/**
 * 菜单数据导出配置
 */
export const menuExportConfig = {
    headers: {
        Id: 'ID',
        Label: '菜单名称',
        Path: '路径',
        Component: '组件',
        ParentId: '父菜单ID',
        Order: '排序',
        IsShow: '显示状态',
        IsLayout: '菜单布局',
        CreateTime: '创建时间',
        UpdateTime: '更新时间'
    },
    
    // 数据转换函数
    transformData: (data: any[]) => {
        return data.map(item => ({
            ...item,
            IsShow: item.IsShow ? '显示' : '隐藏',
            IsLayout: item.IsLayout ? '菜单' : '页面',
            CreateTime: formatDateTime(item.CreateTime),
            UpdateTime: formatDateTime(item.UpdateTime)
        }));
    }
};
